EC2に割り当てたセキュリティグループの数を一斉に出力するPythonスクリプト作ってみた
こんにちは、臼田です。
皆さんLambdaしていますか?
今回は残念ながらLambdaには落とし込めていませんが、ちょっとしたスクリプトを書いたので共有したいと思います。
セキュリティグループが何個割り当てられているか確認したい
こんな課題はありませんか?
セキュリティグループは1つのEC2インスタンス(正確にはENI)につきデフォルトで5つまでしか割り当てられません。
役割ごとセキュリティグループを区切り過ぎるとうっかり上限に達していたり、ギリギリになっていたりします。
しかし、マネジメントコンソールからはぱっと見て各インスタンスの割当数は確認できません。
というわけで、それをダンプするスクリプトを書きました。
スクリプト
# -*- coding: utf-8 -*- import argparse import boto3 # Usage: python get-sg-count.py (get all instances sg count) # python get-sg-count.py i-xxxxxxxx i-yyyyyyyyy (get select instances sg count) # load instance list parser = argparse.ArgumentParser() parser.add_argument('instances', help='instance_id', nargs='*') args = parser.parse_args() ec2 = boto3.resource('ec2') if len(args.instances) == 0: # get instance_ids if no args instance_iterator = ec2.instances.all() instances = map(lambda x:x.id, instance_iterator) else: instances = args.instances for i in instances: instance = ec2.Instance(i) sgcount = len(instance.security_groups) t = instance.tags name_tag = filter(lambda x:x['Key']=='Name', t) name = name_tag[0]['Value'] if len(name_tag) > 0 else '' # dump [count: instance_id: Name_tag] print(': '.join([str(sgcount), i, name]))
実行結果
$ python get-sg-count.py 1: i-xxxxx667: server01 3: i-xxxxxd35: server02 1: i-xxxxxca4: server03 3: i-xxxxxce0: server04 2: i-xxxxx520: server05 4: i-xxxxx586: server06 4: i-xxxxxc49: server07 1: i-xxxxx059: server08 3: i-xxxxxdb3: server09 2: i-xxxxx6db: server10 1: i-xxxxxe3b: server11 4: i-xxxxxce4: server12 3: i-xxxxxd37: server13 3: i-xxxxxdb1: server14 $ python get-sg-count.py i-xxxxxca4 i-xxxxxce0 i-xxxxx520 i-xxxxx586 i-xxxxxc49 1: i-xxxxxca4: server03 3: i-xxxxxce0: server04 2: i-xxxxx520: server05 4: i-xxxxx586: server06 4: i-xxxxxc49: server07
引数を指定しないと全てのインスタンスについて実行し、確認したいインスタンスが決まっている場合にはそれだけ引数で指定することができます。
応用として、4つ以上割り当てられていたら表示するように条件を追加してあげてもいいかもしれませんね。
まとめ
マネジメントコンソールで一個一個確認することは煩雑で、対象が多くなるほどやりたくないですよね。
ちょっとした事でもスクリプトにして、今後も少しでもワークハックしていきたいです。